Server computers often include one or more input/output (I/O) devices. For example, a server computer may include one or more I/O adapter devices for communicating with a network and/or direct-attached storage device. Each I/O device may communicate over multiple, possibly asynchronous interfaces, such as PCI Express (PCIe) and/or Ethernet. For example, a host server computer may send I/O transactions over a PCIe bus to the I/O adapter device, and the I/O adapter device may send those I/O transactions over an Ethernet cable for processing by another server.
Transmission of data over cables or other mediums sometimes results in errors in the transmitted data. These errors may occur for a variety of reasons, from misconfigured devices in the transmission path to radiation affecting the transmission medium or devices. Absent some mechanism for tracking the data in flight, neither the sender nor the recipient is aware that errors have been introduced into the transmitted data. When, however, the recipient is made aware of errors in the data, the recipient can take corrective measures, including correcting the errors or requesting that the data be sent again.
Various mechanisms exist for informing the recipient that there are errors in the received data. One such mechanism is to provide an error correction value with the transmitted data. An error correction value is a value produced by executing a calculation over all or part of the transmitted data. An error correction value may be calculated for transmitted data, and sent with the transmitted data. The recipient may then also calculate the error correction value, and compare its calculated value against the value it received with the data. When the values do not match, there may be an error in the transmitted data. Various methods exist for calculating error correction values, such as parity, checksum, cyclic redundancy check (CRC) and others.